package qualomelhor.gwt.modules.client;

import java.util.ArrayList;
import java.util.HashMap;
import qualomelhor.database.Avatar;
import qualomelhor.database.BuscaComparacao;
import qualomelhor.database.Categoria;
import qualomelhor.database.Comparacao;
import qualomelhor.database.Comparacao.TipoComparacao;
import qualomelhor.database.ExpressaoDB;
import qualomelhor.database.LinkCategoria_Produto;
import qualomelhor.database.LinkComparacao;
import qualomelhor.database.ParteAvatar;
import qualomelhor.database.PathComparacao;
import qualomelhor.database.PosicaoMaosDB;
import qualomelhor.database.Produto;
import qualomelhor.database.ParametrosSistema.SiteHost;
import qualomelhor.database.SequenciaExpressaoDB;
import qualomelhor.database.TermoIdioma;
import qualomelhor.database.Usuario;
import com.google.appengine.api.datastore.Blob;
import com.google.gwt.user.client.rpc.AsyncCallback;

public interface ISessionSuportServiceAsync {

	void gravaCategoria(Long idCategoria, String nomeCategoria, boolean translate,
			Long idCategoriaPai, String enderecoFotoCategoria, String enderecoIcon,
			int ordem, boolean bloqueado, HashMap<String, String> mapLocale_Name, AsyncCallback<Boolean> callback);

	void gravaProduto(Long id, String nomeProduto, Long idCategoria, String descricao,
			String enderecoFotoMini, ArrayList<String> listEnderecoFoto, ArrayList<Blob> listImagesBlob, boolean bloqueado,
			AsyncCallback<Boolean> callback);

	void getListCategorias(boolean recarregar, AsyncCallback<ArrayList<Categoria>> callback);

	void deletaCategoria(Long idCategoria, AsyncCallback<Boolean> callback);

	void getListProdutos(boolean recarregar,
			AsyncCallback<ArrayList<Produto>> callback);

	void deletaProduto(Long idProduto, AsyncCallback<Boolean> callback);

	void gravaComparacao1Coisa(Long idUsuario, String nomeProduto, ArrayList<String> listEnderecoFoto, ArrayList<Blob> listImagesBlob, SiteHost site, String locale, String complementoPergunta, AsyncCallback<Comparacao> callback);

	void getListParteAvatar(boolean recarregar,
			AsyncCallback<ArrayList<ParteAvatar>> callback);

	void deletaParteAvatar(Long idParte, AsyncCallback<Boolean> callback);

	void gravaParteAvatar(Long id, String nomeArquivo, int tipoParteCorpo,
			AsyncCallback<Boolean> callback);

	void getListComparacao(boolean recarregar,
			AsyncCallback<ArrayList<Comparacao>> callback);

	void deletaComparacao(Long idComparacao, AsyncCallback<Boolean> callback);

	void gravaComparacao(Long id, TipoComparacao tipoComparacao, ArrayList<Long> listProdutoComp, ArrayList<PathComparacao> listPathComparacao, SiteHost site, String locale, Avatar av, AsyncCallback<Comparacao> callback);

	void gravaComparacao2Coisas(Long idUsuario, String nomeProduto1, String nomeProduto2, ArrayList<String> listEnderecoFotoProd1, ArrayList<String> listDataUrlImagesProd1, ArrayList<String> listEnderecoFotoProd2, ArrayList<String> listDataUrlImagesProd2, SiteHost site, String locale, String complementoPergunta, Avatar av, AsyncCallback<Comparacao> callback);

	void deletaPathComparacao(Long idComp, SiteHost site, AsyncCallback<Boolean> callback);

	void addPathComparacao(Long idComparacao, String path, SiteHost site, String complementoPergunta, AsyncCallback<Comparacao> callback);

	void deletaBusca(Long idProd, String busca, AsyncCallback<Boolean> callback);

	void addBusca(Long idProduto, String busca, AsyncCallback<Boolean> callback);

	void carregaSessaoAtual(AsyncCallback<HashMap<String, Object>> callback);

	void gravaPosicaoMao(PosicaoMaosDB pMaoDB, AsyncCallback<Boolean> callback);

	void carregaPosicaoMaoDB(String nome, AsyncCallback<PosicaoMaosDB> callback);

	void deletaPosicaoMaoDB(String nome, AsyncCallback<Boolean> callback);

	void gravaExpressao(ExpressaoDB exprDB, AsyncCallback<Boolean> callback);

	void carregaExpressaoDB(String nome, AsyncCallback<ExpressaoDB> callback);

	void deletaExpressaoDB(String nome, AsyncCallback<Boolean> callback);

	void carregaSequenciaExpressaoDB(String nome,
			AsyncCallback<SequenciaExpressaoDB> callback);

	void gravaSequenciaExpressao(SequenciaExpressaoDB seqExprDB,
			AsyncCallback<Boolean> callback);

	void gravaMatrExpressao(ArrayList<ExpressaoDB> listExprDB,
			AsyncCallback<Boolean> callback);

	void deletaTodasExpressoesDB(AsyncCallback<Boolean> callback);

	void deletaTodasPosicoesMaosDB(AsyncCallback<Boolean> callback);

	void gravaVoto(Long idComparacao, Long idUsuario, Long idProduto, String coment, AsyncCallback<Integer> callback);

	void gravaProdutoMerge(Produto pNovo, Long pAnt1, Long pAnt2,
			AsyncCallback<Boolean> callback);

	void teste(boolean b, AsyncCallback<Boolean> callback);

	void gravaVotoComparacao(Long idComparacao, AsyncCallback<Boolean> callback);

	void gravaRespostaComentario(Long idComparacao, int idVoto, String pathId, Long idUsuario, String coment, AsyncCallback<Integer> callback);

	void getListTermoIdioma(int offset, int limit, boolean orderByLocaleFirst, boolean somenteSemTraducao, AsyncCallback<ArrayList<TermoIdioma>> callback);

	void deletaTermoIdioma(Long id, AsyncCallback<Boolean> callback);

	void deletaLocaleCategoria(Long idCategoria, String locale,
			AsyncCallback<Boolean> callback);

	void addLocaleCategoria(Long idCategoria, String locale,
			String nomeTraduzido, AsyncCallback<Boolean> callback);

	void carregaLocaleAtual(AsyncCallback<String> callback);

	void carregaUsuarioAtual(AsyncCallback<Usuario> callback);

	void salvaLinkBlogComparacao(Long idComparacao, Long idUsuarioLink, String nomeBlog, String link,
			AsyncCallback<Boolean> callback);

	void alteraVoto(int idVoto, Long idComparacao, Long idUsuario,
			String coment, AsyncCallback<Integer> callback);

	void deletaVoto(int idVoto, Long idComparacao, Long idUsuario,
			AsyncCallback<Boolean> callback);

	void carregaProduto(Long idProduto, AsyncCallback<Produto> callback);

	void enviaEmail(String assunto, String nome, String email, String mensagem,
			AsyncCallback<Boolean> callback);

	void gravaTermoIdioma(Long id, String nomeTermo, String locale,
			String traducao, AsyncCallback<Boolean> callback);

	void carregaListLinkProduto(Long idProduto,
			AsyncCallback<ArrayList<LinkCategoria_Produto>> callback);

	void carregaListLinkComparacao(Long idComparacao,
			AsyncCallback<ArrayList<LinkComparacao>> callback);

	void carregaListaBuscaComparacao(Long idProduto,
			AsyncCallback<ArrayList<BuscaComparacao>> callback);

	void carregaListaBuscaComparacaoPorIdComparacao(Long idComparacao,
			AsyncCallback<ArrayList<BuscaComparacao>> callback);

	void salvaShareFBID(Long idComparacao, String idShare, AsyncCallback<Boolean> callback);
}